
import java.util.Scanner;

/*
 * To change this template, choose Tools | Templates and open the template in
 * the editor.
 */
/**
 *
 * @author sergio
 */
public class Main
{

    /**
     * @param args the command line arguments
     */
    public static void main ( String[] args )
    {
        String archivoSalida, letra, opcion;
        int n, count = 0;
        boolean mostrar = false;

        try
        {
            if ( args.length > 2 && args.length < 9 )
            {
                n = Integer.parseInt ( args[1] );// sacamos el n
                letra = ( String ) args[3];  // sacamos la version a utilizar (S,F,W,WF)
                opcion = ( String ) args[5];
                opcion.toLowerCase ();
                archivoSalida = ( String ) args[7]; //sacamos el archivo donde se guardaran los datos
                
                Scanner scaner = new Scanner ( System.in );

                switch ( opcion )
                {
                    case "f":
                        n = ( int ) ( n * Math.pow ( 2 , 10 ) ); //el n es: n a la K
                        mostrar = false;
                        break;
                    case "t":
                        mostrar = true;
                        break;
                    default:
                        printAviso ();
                        System.exit(0);
                        break;
                }
                Integer[] l = new Integer[ n ]; // creamos un arreglo para guardar los datos de entrada
                HeapBinary heap = new HeapBinary ( n , archivoSalida );
                while ( scaner.hasNext () )
                {
                    String lee = scaner.nextLine ();
                    String[] line = lee.split ( " " );
                    for ( int i = 0 ; i < line.length ; i ++ )
                    {
                        l[count] = new Integer ( line[i] );
                        count ++;
                    }
                }
                if(!heap.heapSort ( letra , l , mostrar ))
                {
                    printAviso ();
                    System.exit ( 0 );
                }
                imprimeLlaves(heap.returnKeyCounter());
            }
            else
            {
                printAviso ();
            }
        }
        catch ( Exception exception )
        {
            printAviso ();
        }

    }

    private static void printAviso ()
    {
        System.out.println ( "inicie el programa de forma correcta" );
        System.out.println ( "java Main -n N --version V -v T -o archiSalida.txt < entrada.txt \n \n" );
        System.out.println ( "V debe ser S, F, W, WF" );
        System.out.println ( "T puede ser t o f, para decir true o false " );
        System.out.println ( "si T es true, el n ingresado es igual a la cantidad de datos a ingresar" );
        System.out.println ( "pero si es false el n de datos es n -K, es decir (n * 1024) datos" );
    }
    
    private static  void imprimeLlaves(int llaves)
    {
        System.out.println("Comparaciones de Llaves: "+ llaves);
    }
}
